home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / SATAN11.ZIP / SRC / MISC / MD5.C < prev    next >
Encoding:
C/C++ Source or Header  |  1995-04-04  |  1.1 KB  |  58 lines

  1.  /*
  2.   * md5 - trivial command-line driver for the MD5 hash function.
  3.   * 
  4.   * usage: md5 [files...]
  5.   * 
  6.   * Author: Wietse Venema.
  7.   */
  8. #include <stdio.h>
  9. #include "global.h"
  10. #include "md5.h"
  11.  
  12. #define MD5_HASH_LENGTH    16
  13.  
  14. main(argc, argv)
  15. int     argc;
  16. char  **argv;
  17. {
  18.     char   *crunch();
  19.     FILE   *fp;
  20.  
  21.     if (argc < 2) {
  22.     printf("%s\n", crunch(stdin));
  23.     } else {
  24.     while (--argc && *++argv) {
  25.         if ((fp = fopen(*argv, "r")) == 0) {
  26.         perror(*argv);
  27.         return (1);
  28.         }
  29.         printf("%s    %s\n", crunch(fp), *argv);
  30.         fclose(fp);
  31.     }
  32.     }
  33.     return (0);
  34. }
  35.  
  36. char   *crunch(fp)
  37. FILE   *fp;
  38. {
  39.     MD5_CTX md;
  40.     unsigned char sum[MD5_HASH_LENGTH];
  41.     unsigned char buf[BUFSIZ];
  42.     static char result[2 * MD5_HASH_LENGTH + 1];
  43.     static char hex[] = "0123456789abcdef";
  44.     int     buflen;
  45.     int     i;
  46.  
  47.     MD5Init(&md);
  48.     while ((buflen = fread(buf, 1, BUFSIZ, fp)) > 0)
  49.     MD5Update(&md, buf, buflen);
  50.     MD5Final(sum, &md);
  51.  
  52.     for (i = 0; i < MD5_HASH_LENGTH; i++) {
  53.     result[2 * i] = hex[(sum[i] >> 4) & 0xf];
  54.     result[2 * i + 1] = hex[sum[i] & 0xf];
  55.     }
  56.     return (result);
  57. }
  58.